# cpp := src/main.cpp
# obj := objs/main.o #生成在objs目录下面

# $(obj) : $(cpp)
# 	@g++ -c $@ -o $<  # $< 代表第一个依赖文件的名称 #^ 表示所有的依赖文件 $@表示的所有的目标文件

# compile : $(obj)

# clean :
# 	@rm -rf exec *.o

# debug :
# 	@echo $(cpp)
# 	@echo $(obj)

# .PHONY : clean debug

# Section 2  = 可以改变赋值 :=的值是不允许改变的
# HOST_ARCH := aarch64
# TARGET_ARCH := $(HOST_ARCH)

# HOST_ARCH := amd64

# debug:
# 	@echo $(TARGET_ARCH)


# ?= 若以赋值，不进行任何操作，否则赋他这个值

# HOST_ARCH = aarch64
# HOST_ARCH ?= amd64

# debug : 
# 	@echo $(HOST_ARCH)

# include_paths := src

# CXXFLAGS := -m64 -fPIC -g -O0 -std=c++11 -w -fopenmp

# CXXFLAGS += $(include_paths)

# debug:
# 	@echo $(CXXFLAGS)


# 常用的8个函数

#1. shell 函数
# cpp_srcs := $(shell find src -name *.cpp)

# debug :
# 	@echo $(cpp_srcs)

# .PHONY : debug

#2. subst函数
# cpp_srcs := $(shell find src -name *.cpp)
# # cpp_objs := $(subst src/,objs/,$(cpp_srcs)) #先换名称 src 变成 objs
# # cpp_objs := $(subst .cpp,.o,$(cpp_objs)) #再换后缀 .cpp 变成 .o

# 3. patsubst只需要一行去完成 通配符 % 表示任意长度字符串
# cpp_objs := $(patsubst src/%.cpp,objs/%.o,$(cpp_srcs))

# debug :
# 	@echo $(cpp_srcs)
# 	@echo $(cpp_objs)

# .PHONY : clean

# 4. foreach 函数
# include_paths := /usr/include \
# 				 /usr/include/opencv2/core

# # libs :=
# # library_paths :=

# # include_paths := $(foreach item,$(include_paths),-I$(include_paths))

# #通配符 % 匹配任意长度字符串
# I_flag := $(include_paths:%=-I%)

# debug:
# 	@echo $(I_flag)


# 5. dir创建文件夹的命令

# cpp_srcs := $(shell find src -name *.cpp)
# cpp_objs := $(patsubst src/%.cpp,objs/%.o,$(cpp_srcs))

# # -p 表示无论文件夹存不存在，都不会报错
# objs/%.o : src/%.cpp
# 	@mkdir -p $(dir $@) 
# 	@g++ -c $^ -o $@

# compile : $(cpp_objs)

# debug:
# 	@echo $(cpp_srcs)
# 	@echo $(cpp_objs)

# .PHONY : debug compile


# 6. notdir的用法
libs := $(shell find . -name lib*)
libs := $(notdir $(libs)) #删除库文件前面的路径

# 7. filter的使用 过滤作用 下面是区分动静态库 basename删除尾巴 .a .so 就是.后面的东西
# subst 将 lib 全部用 '' 替换 相当于去掉了库的头 lib
a_libs := $(subst lib,,$(basename $(filter %.a,$(libs)))) 
so_libs := $(subst lib,,$(basename $(filter %.so,$(libs))))

debug :
	@echo $(libs)
	@echo $(so_libs)
.PHONY : debug

